#target photoshop
#include image_actions.jsxinc

app.bringToFront();
$.localize = true;

var messages = {
	"wizardTitle" : localize("$$$/JavaScripts/PlinnImageWizard/Title"),
	"srcPanelLabel" : localize("$$$/JavaScripts/PlinnImageWizard/SrcPanelLabel"),
	
	"helpPropsFile" : localize("$$$/JavaScripts/PlinnImageWizard/HelpPropsFile"),
	"buttonSelectPropsFile" : localize("$$$/JavaScripts/PlinnImageWizard/ButtonSelectPropsFile"),
	"noFileSelected" : localize("$$$/JavaScripts/PlinnImageWizard/NoFileSelected"),
	"promptSelectSrcPropsFile" : localize("$$$/JavaScripts/PlinnImageWizard/PromptSelectSrcPropsFile"),
	
	"helpSrcFolder" : localize("$$$/JavaScripts/PlinnImageWizard/HelpSrcFolder"),
	"selectSrcFolder" : localize("$$$/JavaScripts/PlinnImageWizard/ButtonSelectSrcFolder"),
	"promptSelectSrcFolder" : localize("$$$/JavaScripts/PlinnImageWizard/PromptSelectSrcFolder"),

	"destPanelLabel" : localize("$$$/JavaScripts/PlinnImageWizard/DestPanelLabel"),
	"helpDestFolder" : localize("$$$/JavaScripts/PlinnImageWizard/HelpDestFolder"),
	"selectDestFolder" : localize("$$$/JavaScripts/PlinnImageWizard/ButtonSelectDestFolder"),
	"promptSelectDestFolder" : localize("$$$/JavaScripts/PlinnImageWizard/PromptSelectDestFolder"),

	"noFolderSelected" : localize("$$$/JavaScripts/PlinnImageWizard/NoFolderSelected"),
	"okBtnLabel" : localize("$$$/JavaScripts/PlinnImageWizard/OkBtnLabel"),
	"cancelBtnLabel" : localize("$$$/JavaScripts/PlinnImageWizard/CancelBtnLabel")
}

function init() {
	dlg = null;
	propsFile = null;
	selectedPropsFile = null;
	srcFolder = null;
	selectedFolderPath = null;
	destFolder = null
	selectedDestFolderPath = null;
	gShortFileNameLength = 22;
	plinnFileProcess = {'loading_progress.psd':true,
						'plinn.psd':true};
	plinnFiles = null;
	colorRegistry = new Array();
}


var colorRegistry = new Array();
colorRegistry['menuBAr']

var PlinnProcess = new Array();

PlinnProcess['loading_progress.psd'] = function(file) {
    var doc = app.open(file)
    app.activeDocument = doc;
	var fsPath = destFolder.fsName + '/loading_progress.gif';
	_loadingProgress(fsPath, colorRegistry['memberActionsBoxBackground'], colorRegistry['bulletColor'])
    doc.close(SaveOptions.DONOTSAVECHANGES);
};

PlinnProcess['plinn.psd'] = function(file) {
    var doc = app.open(file)
    app.activeDocument = doc;
	var fsPath = destFolder.fsName + '/logo.gif';
	_plinnLogo(fsPath, colorRegistry['topbarBackgroundColor'], colorRegistry['bulletColor'])
    doc.close(SaveOptions.DONOTSAVECHANGES);
};

function inputFileFilter(ob) {
    return (plinnFileProcess[ob.name]) ? true : false;
}

function setPropsFile() {
	propsFile = File.openDialog(messages['promptSelectSrcPropsFile']);
	if (!propsFile)
	    return;
	selectedPropsFile.text = shortFileName(propsFile.fsName);
	parsePropsFile();
	checkVarsInitialization();
}

function setSrcFolder() {
	srcFolder = Folder.selectDialog(messages['promptSelectSrcFolder']);
	if (!srcFolder)
	    return;
	selectedSrcFolderPath.text = shortFileName(srcFolder.fsName);
	plinnFiles = srcFolder.getFiles(inputFileFilter);
	checkVarsInitialization();
}

function setDestFolder() {
	destFolder = Folder.selectDialog(messages['promptSelectDestFolder']);
	if (!destFolder)
	    return;
	selectedDestFolderPath.text = shortFileName(destFolder.fsName);
	checkVarsInitialization();
}

function checkVarsInitialization() {
    if (propsFile && srcFolder && destFolder)
        dlg.defaultElement.enabled = true;
}

function parsePropsFile() {
	propsFile.open('r');
	var line, nameTypeValue, name, typeValue, type, value;
	while (!propsFile.eof) {
		line = propsFile.readln();
		line = line.replace(/^\s*(.*?)\s*$/, "$1");
		if (!line || line[0] == '#') continue;
		
		/* découpage */
        nameTypeValue = line.split(':',2)
		name = nameTypeValue[0];
		typeValue = nameTypeValue[1].split('=', 2);
		type = typeValue[0];
		value = typeValue[1];
		/* strip */
		name = name.replace(/^\s*(.*?)\s*$/, "$1");
		type = type.replace(/^\s*(.*?)\s*$/, "$1");
		value = value.replace(/^\s*(.*?)\s*$/, "$1");
		if (type != 'string' || value[0] != '#')
			continue;
		
		colorRegistry[name] = splitRGB(value);
	}
}

var hexToDec = {'0':0, '1':1, '2':2,  '3':3,  '4':4,  '5':5,  '6':6,  '7':7,
                '8':8, '9':9, 'a':10, 'b':11, 'c':12, 'd':13, 'e':14, 'f':15};
function splitRGB(value) {
    value = value.slice(1)
    value = value.toLowerCase();
    if (value.length == 3)
        value = value[0] + value[0] + value[1] + value[1] + value[2] + value[2]
    var r = value.slice(0,2);
    var g = value.slice(2, 4);
    var b = value.slice(4, 6);
    
    r = 16 * hexToDec[r[0]] + hexToDec[r[1]];
    g = 16 * hexToDec[g[0]] + hexToDec[g[1]];
    b = 16 * hexToDec[b[0]] + hexToDec[b[1]];
    return [r, g, b];
}

function processImages() {
    for (var i = 0 ; i < plinnFiles.length ; i++)
        PlinnProcess[plinnFiles[i].name](plinnFiles[i]);
    dlg.close();
}

function drawDialog() {
	dlg = new Window('dialog', messages['wizardTitle']);
	
	/* Panneau de sélection des données source */
	var panelSrc = dlg.add('panel', undefined, messages['srcPanelLabel']);
	
	/* Fichier de propriétés */
	panelSrc.add('statictext', undefined, messages['helpPropsFile']);
	var propsFileGrp = panelSrc.add('group');
	var btnChoosePropsFile = propsFileGrp.add('button', undefined, messages['buttonSelectPropsFile']);
	btnChoosePropsFile.onClick = setPropsFile;
	selectedPropsFile = propsFileGrp.add('statictext');
	selectedPropsFile.text = messages['noFileSelected'];
	
	/* Sélection du dossier source */
	panelSrc.add('statictext', undefined, messages['helpSrcFolder']);
	panelSrc.alignChildren = "left";
	var folderSrcGroup = panelSrc.add('group');
	var btnChooseSrcFolder = folderSrcGroup.add('button', undefined, messages['selectSrcFolder']);
	btnChooseSrcFolder.onClick = setSrcFolder;
	
	selectedSrcFolderPath = folderSrcGroup.add('statictext');
	selectedSrcFolderPath.text = messages['noFolderSelected'];
	
	/* Panneau de sélection du dossier de destination */
	var panelDest = dlg.add('panel', undefined, messages['destPanelLabel']);
	panelDest.add('statictext', undefined, messages['helpDestFolder']);
	panelDest.alignChildren = "left";
	var folderDestGroup = panelDest.add('group');
	var btnChooseDestFolder = folderDestGroup.add('button', undefined, messages['selectDestFolder']);
	btnChooseDestFolder.onClick = setDestFolder;
	
	selectedDestFolderPath = folderDestGroup.add('statictext');
	selectedDestFolderPath.text = messages['noFolderSelected'];

	
	
	/* Boutons de contrôle */
	var ctrlGrp = dlg.add('group');
	ctrlGrp.alignement= 'right';
	ctrlGrp.alignChildren = "right";
	var okBtn = ctrlGrp.add('button', undefined, messages["okBtnLabel"]);
	okBtn.enabled = false;
	okBtn.onClick = processImages;
	dlg.defaultElement = okBtn;
	var cancelBtn = ctrlGrp.add('button', undefined, messages["cancelBtnLabel"]);
	dlg.cancelElement = cancelBtn;
	
		
	dlg.center();
	dlg.show();
}


function shortFileName( inFileName ) {
	if ( inFileName.length > gShortFileNameLength ) {
		return "..." + inFileName.substr( inFileName.length - gShortFileNameLength + 3, gShortFileNameLength - 3 );
	}
	return inFileName;
}

function setSolidFillColor(color) {
    var r = color[0];
    var g = color[1];
    var b = color[2];
	var id9 = charIDToTypeID( "setd" );
	    var desc4 = new ActionDescriptor();
	    var id10 = charIDToTypeID( "null" );
	        var ref1 = new ActionReference();
	        var id11 = stringIDToTypeID( "contentLayer" );
	        var id12 = charIDToTypeID( "Ordn" );
	        var id13 = charIDToTypeID( "Trgt" );
	        ref1.putEnumerated( id11, id12, id13 );
	    desc4.putReference( id10, ref1 );
	    var id14 = charIDToTypeID( "T   " );
	        var desc5 = new ActionDescriptor();
	        var id15 = charIDToTypeID( "Clr " );
	            var desc6 = new ActionDescriptor();
	            var id16 = charIDToTypeID( "Rd  " );
	            desc6.putDouble( id16, r );
	            var id17 = charIDToTypeID( "Grn " );
	            desc6.putDouble( id17, g );
	            var id18 = charIDToTypeID( "Bl  " );
	            desc6.putDouble( id18, b );
	        var id19 = charIDToTypeID( "RGBC" );
	        desc5.putObject( id15, id19, desc6 );
	    var id20 = stringIDToTypeID( "solidColorLayer" );
	    desc4.putObject( id14, id20, desc5 );
	executeAction( id9, desc4, DialogModes.NO );	
}

function main() {
	init();
	drawDialog();
}

try {
    main();
}
catch(e) {
    alert(e);
}